<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // console.log(data);
        // // 变量提升, 指的是变量还没有声明时就可以使用,
        // // 其实是js在解析代码的时候, var data 声明被提到了最前面
        
        // if (true) {
        //     var data = 1
        //     var data = 666
        //     console.log(data);
        // }

        // let 不能重新定义, 修改赋值时无需加 Let, 没有变量提升
        let data = 1
        data = 2
        console.log(data);

        // const 常量, 设定有不能修改
        const data2 = '小明'
        // data2 = '小红'
        
        // 这个例子输出的是 10 次 10
        // var 具有全局/函数作用域, 可以被重新定义 
        // 在整个 for 循环当中, 其实只有一个 i 变量
        // 等到定时器触发, i 早就已经变成 10, 没有之前的数据了
        for(var i = 0; i < 10; i++) {
            // 设定一个定时器, 一秒钟后打印 i
            setTimeout(() => {
                console.log(i);
            }, 1000);
        }

        // 将 var 换成 let 就可以输出 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
        // let 具有块级作用域, 每一个 for 循环都会创建一个 i 变量
        for(let i = 0; i < 10; i++) {
            // 设定一个定时器, 一秒钟后打印 i
            setTimeout(() => {
                console.log(i);
            }, 1000);
        }
    </script>
</body>
</html>